#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <string>

using namespace std;

void printMap(map<string, size_t> &);

int main()
{
    vector<int> ivec = {2, 4, 6, 8, 2, 4, 6, 8};    // ivec 有 8 个元素
    set<int> set2;                                  // 空集合
    set2.insert(ivec.cbegin(), ivec.cend());        // set2 有 4 个元素
    set2.insert({1, 3, 5, 7, 1, 3, 5, 7});          // set2 现在有 8 个元素

    map<string, size_t> word_count = {{"hello", 1}, {"world", 2}};
    string word = "honey";
    // 向 word_count 插入 word 的 4 种方法
    word_count.insert({word, 1});
    word_count.insert(make_pair(word, 1));
    word_count.insert(pair<string, size_t>(word, 1));
    word_count.insert(map<string, size_t>::value_type(word, 1));

    // 统计每个单词在输入中出现次数的一种更烦琐的方法
    while (cin >> word) {
        // 插入一个元素，关键字等于 word，值为1；
        // 若 word 已在 word_count 中，insert 什么也不做
        pair<map<string, size_t>::iterator, bool> ret = word_count.insert({word, 1});
        if (!ret.second) {          // word 已在 word_count 中
            // ++((ret.first)->second); 等价的表达式
            ++ret.first->second;    // 递增计数器
            cout << ret.first->first << ": " << ret.first->second << endl;
        }
    }
    printMap(word_count);

    multimap<string, string> authors;
    // 插入第一个元素，关键字为 Barth, John
    authors.insert({"Barth, John", "Sot-Weed Factor"});
    // 正确：添加第二个元素，关键字也是 Barth, John
    authors.insert({"Barth, John", "Lost in the Funhouse"});
}

void printMap(map<string, size_t> &m)
{
    for (auto it = m.cbegin(); it != m.cend(); ++it)
    {
        pair<const string, size_t> pa = *it;
        cout << pa.first << " " << pa.second << endl;
    }
}